class Solution {
    // 暴力枚举
    public int peakIndexInMountainArray2(int[] arr) {
        // 遍历数组寻找最大值
        int max = 0;
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > arr[max]) {
                max = i;
            } else { // max此时就是最大值
                break;
            }
        }
        return max;
    }

    // 峰值在右侧区域
    public int peakIndexInMountainArray(int[] arr) {
        // 二分查找寻找峰值
        int left = 1;
        int right = arr.length-2;
        while (left < right) {
            int mid = left + (right - left) / 2;
            // 峰值存在于右边区间，因此只能和右区间进行比较，而不能跑到左边区间去
            if (arr[mid] < arr[mid+1]) {
                // 落在左边区域
                left = mid+1;
            } else {
                // 落在右边区域
                right = mid;
            }
        }
        return left;
    }

    // 峰值在左侧区域
    public int peakIndexInMountainArray3(int[] arr) {
        // 二分查找寻找峰值
        int left = 1;
        int right = arr.length-2;
        while (left < right) {
            int mid = left + (right - left + 1) / 2;
            // 峰值存在于左边区间，因此只能和左边区间进行比较，而不能跑到右边区间去
            if (arr[mid-1] < arr[mid]) {
                // 落在左边区域
                left = mid;
            } else {
                // 落在右边区域
                right = mid-1;
            }
        }
        return left;
    }
}